package com.jincheng.system.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jincheng.common.annotation.Excel;
import com.jincheng.common.core.domain.BaseEntity;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.io.Serial;
import java.util.Date;


/**
 * 签到记录对象 tb_sign_in_sheet
 *
 * @author DairyJay
 * @date 2025-02-24
 */
@Setter
@Getter
@TableName("tb_sign_in_sheet")
public class SignInSheet extends BaseEntity {
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 签到记录ID（主键，自增）
     */
    @TableId(type = IdType.AUTO)
    private Long checkInId;

    /**
     * 活动ID（外键，引用tb_event表的activity_id）
     */
    @Excel(name = "活动ID", readConverterExp = "外键，引用tb_event表的activity_id")
    private Long activityId;

    /**
     * 用户ID（外键，引用tb_user表的user_id）
     */
    @Excel(name = "用户ID", readConverterExp = "外键，引用tb_user表的user_id")
    private Long userId;

    /**
     * 职位（0普通，1管理员，1签到员）
     */
    @Excel(name = "职位", readConverterExp = "0普通，1管理员，1签到员")
    private Integer position;

    /**
     * 审核状态(0审核通过，1审核未通过，2未审核)
     */
    @Excel(name = "审核状态(0审核通过，1审核未通过，2未审核)")
    private Integer auditStatus;

    /**
     * 签到类型（如正常签到、补签等）
     */
    @Excel(name = "签到类型", readConverterExp = "如=正常签到、补签等")
    private String signInType;

    /**
     * 签到时间（默认为当前时间戳）
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "签到时间", readConverterExp = "默=认为当前时间戳")
    private Date signInTime;

    /**
     * 签退时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "签退时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date signOutTime;

    /**
     * 逻辑删除
     */
    private Integer delFlag;

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("checkInId", getCheckInId())
                .append("activityId", getActivityId())
                .append("userId", getUserId())
                .append("position", getPosition())
                .append("auditStatus", getAuditStatus())
                .append("signInType", getSignInType())
                .append("signInTime", getSignInTime())
                .append("signOutTime", getSignOutTime())
                .append("delFlag", getDelFlag())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .toString();
    }
}
